package com.zjdiepu.www.ibiz.base;

import java.util.List;
import java.util.Set;

import com.zjdiepu.www.base.core.AbstractSysUser;
import com.zjdiepu.www.base.enums.type.CheckResult;
import com.zjdiepu.www.base.enums.type.OperateType;
import com.zjdiepu.www.model.base.dto.SysUser;
import com.zjdiepu.www.model.base.ext.SysUserExt;

/**
 * 用户表Service层操作<br/>
 * @author xiongxiaotun<br/>
 * @time 2017年04月05日 15时28分<br/>
 * @since 1.0<br/>
 */
public interface ISysUserService {
	/**
	 * 条件查询
	 * @date 2017年04月05日 15时28分
	 * @param sysUserExt
	 * @return
	 */
	List<SysUser> selectMuliByExt(SysUserExt sysUserExt);
	
	/**
	 * 条件统计
	 * @date 2017年04月05日 15时28分
	 * @param sysUserExt
	 * @return
	 */
	int countMuliByExt(SysUserExt sysUserExt);
	
	/**
	 * 获取银行名称（银行编码||包裹）
	 * @author xiongxiaotun <br/>
	 * @Title: listBankCodes  <br/>
	 * @Description: 获取银行名称（银行编码||包裹） <br/>
	 * @param bankCodes
	 * @return
	 * @version V1.0  <br/>
	 */
	List<String> listBankCodes(String bankCodes);
	/**
	 * 获取银行名称（银行编码||包裹）
	 * @author xiongxiaotun <br/>
	 * @Title: getBankNameFromBankCodes  <br/>
	 * @Description: 获取银行名称（银行编码||包裹） <br/>
	 * @param bankCodes
	 * @return
	 * @version V1.0  <br/>
	 */
	String getBankNameFromBankCodes(String bankCodes);
	
	 /**
	  * 获取登录用户
	  * @author xiongxiaotun <br/>
	  * @Title: getLoginedUser  <br/>
	  * @Description: 获取登录用户  <br/>
	  * @param userId
	  * @return
	  * @version V1.0  <br/>
	  */
	 SysUser getLoginedUser(String userId);
	    
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: checkUserId  <br/>
	 * @Description: 检查当前用户是否可以操作目标用户  <br/>
	 * @param currentCompanyId
	 * @param currentUserId
	 * @param admin
	 * @param targetCompanyId
	 * @param targetUserId
	 * @return 结果类型：0：正常 1：目标为超级用户 2：操作本人 3:不在本公司 4：目标为空
	 * @version V1.0  <br/>
	 */
	CheckResult checkUser(String currentCompanyId, String currentUserId, boolean admin, String targetCompanyId,String targetUserId);
	
	/**
	 * 新增,更新和保存
	 * @param updateUnit 是否更新关联的业务单位
	 * @param SysUser 
	 * @param OperateType 操作类型 {@link OperateType}
	 */
	void saveUpdateAndDelete(boolean updateUnit, SysUser sysUser, AbstractSysUser currentUser,OperateType operType);
	
	/**
	 * 条件查询
	 * @date 2017年04月05日 15时28分
	 * @param sysUserExt
	 * @return
	 */
	List<SysUser> selectByExt(SysUserExt sysUserExt);
	
	/**
	 * 条件统计
	 * @date 2017年04月05日 15时28分
	 * @param sysUserExt
	 * @return
	 */
	int countByExt(SysUserExt sysUserExt);
	
	/**
	 * 主键查询
	 * @date 2017年04月05日 15时28分
	 * @param id
	 * @return
	 */
	SysUser selectById(String id);
	
	/**
	 * 根据主键清除空字段，设置值为null
	 * @date 2017年04月05日 15时28分
	 * @param fieldNames 字段名
	 * @param id 主键
	 */
	void clearEmpty(Set<String> fieldNames, String id);
	/**
	 * 根据名称查询
	 * @author xiongxiaotun@126.com
	 * @time 2017年3月26日 上午1:33:30
	 * @since 1.0.0
	 * @update
	 * @param name
	 * @param mobile 移动端
	 * @return
	 */
	SysUser selectByName(String name, boolean mobile);
	/**
	 * 精确统计(=)
	 * @author xiongxiaotun
	 * @time 2017年04月08日 18时54分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	int countRefined(SysUser sysUser);
	/**
	 * 精确查询(=)
	 * @author xiongxiaotun
	 * @time 2017年04月08日 18时54分
	 * @since 1.0
	 * @update
	 * @param sysUser
	 * @return
	 */
	SysUser selectRefined(SysUser sysUser);
	/**
	 * @author xiongxiaotun <br/>
	 * @Title repeat  <br/>
	 * @Description 判断是否重复 <br/>
	 * @param sysUser
	 * @return
	 * @version V1.0  <br/>
	 */
	boolean repeat(SysUser sysUser);
	
	List<SysUser> selectByExtServiceDep(SysUserExt sysUserExt);
}
